import axios from 'axios'
import { ElMessage } from 'element-plus'
import host from './env'
import session from './session.js'

let token;

function getToken(){
     if(!token){
        let user=session.getUser();
        token=user.token;
     }
     return token;
}

axios.defaults.baseURL=host; //服务器地址

// 添加请求拦截器
axios.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    config.headers.token=getToken();
    return config;
  }, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  });


// 添加响应拦截器
axios.interceptors.response.use(function (response) {
    //判断http请求状态
    if(response.status===200){
        //获取接口返回的数据
        let data=response.data;


        if(data.code===undefined){
            data=JSON.parse(data);
        }

        //判断接口请求是否正常
        if(data.code===200){
                //将接口数据直接返回
                return Promise.resolve(data);
        }
        //如果code为0
        //判断错误结果是否有数据

        let tmp=data.result;
        if(tmp){
            let err=[];
            for(let o in tmp){
              err.push(tmp[o]);
            }

            let info=err.join("<br/>");
            console.log("info>>>",info);
            ElMessage({
                type:"error",
                message:info,
                dangerouslyUseHTMLString:true
            });
        }else{

            ElMessage({
                type:"error",
                message:data.msg
            });
        }


        //将数据返回给调用者
        return Promise.resolve(data);


    }
    return null;
  }, function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    return Promise.reject(error);
  });


//封装的请求对象
const tmp={
    //get请求
    get(url,params){
      return  axios.get(url,{
            params
        })
    },

    //post请求
    post(url,data){
        return axios.post(url,data);
    },

    //delete
    delete(url,params){
        return axios.delete(url,{params});
    },

    put(url,data){
       return axios.put(url,data);
    }
}

export default {
    install(app){
        app.config.globalProperties.$http=tmp;
    }
}

//导入请求对象
export {
    tmp as http
}

